As the whole world looks for alternate sources to satisfy the increasing needs of power, wind energy seems to be the next viable, cleaner, cheaper source of Non-Conventional source of energy. Wind energy, although a clean fuel source unlike power plants, comes tagged along with its own sets of challenges to be addressed. After being designated as a Data Analyst into the wind farm owned by XYZ Inc., with a lot of help from the field engineer deputed along with me, I had the opportunity to understand first hand, the functionalities, operations and challenges faced in a Wind Farm. The sensors installed at various parts of the whole unit provides several parameters. But to relate the parameters and to associate only those characteristics which primarily contribute in altering the power was important. The deputed field engineer was kind enough in helping us understand these technical specifications and building these important relationships. The below theoretical Power Equation was provided to us from the Field Engineer.
P = 0.5 x ρ x A x Cp x V3 x Ng x Nb
Where,
ρ = Air density in kg/m3,
A = Rotor swept area (m2).
Cp = Coefficient of performance
V = wind velocity (m/s)
Ng = generator efficiency
Nb = gear box bearing efficiency
# loading packages
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
import datetime
import os
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier, RandomForestClassifier
from sklearn.model_selection import StratifiedShuffleSplit
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_recall_fscore_support
from sklearn.metrics import mean_squared_error
from sklearn import model_selection
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import seaborn as sns
import matplotlib.pyplot as plt
from collections import Counter
%matplotlib inline
import openpyxl
import plotly.plotly as py
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)
import plotly.graph_objs as go
os.getcwd()
cd Under writing
#loading data set
train_data=pd.read_excel('Data- Wind turbine diagnosis.xlsx')
train_data.info()
turbine_no="Wind Turbine Diagnosis" #for powercurve graph
##Checking for null values in columns
train_data.isnull().sum().sum()
No data with null values found in data set
# creating a backup of the data set
working_data_set=train_data
working_data_set.head()
# checking if there is any negative Power genrated
working_data_set["Active.Power"][(working_data_set["Active.Power"]<0)]
#Number of power -ve
len(working_data_set["Active.Power"][(working_data_set["Active.Power"]<0)])
##Remove the data that power is -ve
#We do that because according to turbine power curve turbine works between these values.
working_data_set=working_data_set[(working_data_set["Active.Power"]>0)]
Based on the available data set, we have found two data points wherein the power generated were negative.
Out of these two, one record seemed to be a junk record, which may have showed up due to possible sensor reboot. This assumption is based on the fact that, 10 minutes before and after the negative spike, the data points seem perfectly normal. Also, it can be noted that all the sensors show an exact value of -9999, which seems like a maximum range to which the system resets itself upon restart.
Another such anomaly was with a negative power of that was found was the negative wind power that was generated for a time period. Entire record for that particular hour of day has peculiar data which deviates from the standard expectations.
a. Potential causes for negative power might be due to the power flow from load (Power Grid) to source (Wind Turbine) instead of source to load.
b. This phenomenon is often denoted with a negative sign convention. This sign convention is necessary for generating utility bills i.e. to understand who pays whom.
# checking the corelation between attributes
z=working_data_set.corr()
z
f,ax=plt.subplots(figsize=(15, 15))
sns.heatmap(data=working_data_set.corr(),annot=True,linewidths=.5,fmt= '.1f',ax=ax)
plt.show()
To improve the productivity of the plant, the aim is to improve the parameters - Cp, Ng and Nb through predictive data analytics. The above Power Equation did not always hold good. Reason being, we had variable Air Density and Wind Velocity. These parameters altered the efficiency and performance of the Wind Turbine. Upon further diagnosis, it could be understood that changing Air Density and Wind Velocity is a result of several factors and its interdependencies. The above graph , plots these interdependencies
#add a column named month. we will fix values later.
working_data_set["Month"]=train_data["Active.Power"]
working_data_set["hour"]=train_data["Active.Power"] # place holder
working_data_set["formula"]=(train_data["Wind.Speed"]*train_data["Air.Density"]*train_data["Wind.Speed"]*train_data["Wind.Speed"] )
#rename
working_data_set.rename(columns={'DateTime':'Time'},inplace=True)
#rename
working_data_set.rename(columns={'DateTime':'Time'},inplace=True)
#function for finding months
def find_month(a):
a=str(a)
datee = datetime.datetime.strptime(a,"%Y-%m-%d %H:%M:%S")
x=datee.month
if 1 == x:
return "Jan"
elif 2 == x:
return "Feb"
elif 3 == x:
return "March"
elif 4 == x:
return "April"
elif 5 == x:
return "May"
elif 6 == x:
return "June"
elif 7 == x:
return "July"
elif 8 == x:
return "August"
elif 9 == x:
return "Sep"
elif 10 == x:
return "Oct"
elif 11 == x:
return "Nov"
else:
return "Dec"
working_data_set.Month=working_data_set.Time.apply(find_month)
#function for finding months
def find_hour(a):
a=str(a)
datee = datetime.datetime.strptime(a,"%Y-%m-%d %H:%M:%S")
x=datee.hour
return x
working_data_set.hour=working_data_set.Time.apply(find_hour)
#to check the time series data present in data set
working_data_set.hour.unique()
def find_day(a):
a=str(a)
datee = datetime.datetime.strptime(a,"%Y-%m-%d %H:%M:%S")
x=datee.hour
return x
working_data_set.day=working_data_set.Time.apply(find_day)
# check create a mean speed
def mean_speed(x):
list=[]
i=0.25
while i<=25.5:
list.append(i)
i+=0.5
for i in list:
if x < i:
x=i-0.25
return x
#add a new column as "mean_WindSpeed" with function mean_speed().
working_data_set["mean_WindSpeed"]=working_data_set["Wind.Speed"].apply(mean_speed)
#create summary speed dataframe from clean data.
DepGroupT_speed = working_data_set.groupby("mean_WindSpeed")
data_T_speed=DepGroupT_speed.mean()
#change the index numbers.
data_T_speed["Index"]=list(range(1,len(data_T_speed.index)+1))
data_T_speed.set_index("Index",inplace=True)
del data_T_speed.index.name
# Power curve with plotly
trace1 = go.Scatter(
x = data_T_speed["Wind.Speed"],
y = data_T_speed["Active.Power"],
mode = "lines+markers",
name = "ActivePower(kW)",
line = dict(width = 3))
data = [trace1]
layout = dict(title = " Power vs. Wind Speed".format(turbine_no),
xaxis= dict(title= 'Wind Speed (m/s)',ticklen= 5,zeroline= False),
yaxis= dict(title= 'Power',ticklen= 5,zeroline= False),
legend=dict(x=0.5, y=0.5))
fig = dict(data = data, layout = layout)
iplot(fig)
#AIR DENSITY VS POWER
# sorting the data for temp
data_T_power=data_T_speed.sort_values('Active.Power')
trace1 = go.Scatter(
x = data_T_power["Active.Power"],
y = data_T_power["Air.Density"],
mode = "lines+markers",
name = "AIR DENSITY",
line = dict(width = 3))
data = [trace1]
layout = dict(title = "AIR DENSITY VS POWER fig 3".format(turbine_no),
xaxis= dict(title= 'Power',ticklen= 5,zeroline= False),
yaxis= dict(title= 'Air Density',ticklen= 5,zeroline= False,range = [1.15,1.25]),
legend=dict(x=0.5, y=0.5))
fig = dict(data = data, layout = layout)
iplot(fig)
It could be seen from the provided equation that Generated Power is proportional to Wind Velocity cubed and it is directly proportional to the Air Density. The below graphs ([Fig 2], [Fig 3]) were plotted to verify the same. It may be seen that the relationship between Power and Wind Speed is exponential in nature and that of Power with Air Density is partially linear. Although, it is interesting to note that at Rated Power, even with the increase in Air Density and Wind Power, there seems to be no significant change in the Power Output. We see that there are several outliers at 2500kW, in both, [Fig 2], [Fig 3]. The generator coupled with the Wind Turbine seems to have reached its threshold of maximum power output and hence it is conclusive that the rated power of the unit is approximately 2500kW. The maximum possible efficiency of any generator can be achieved only at this power. Thus, our intention would be to help the unit in generating the rated power to get the maximum efficiency
trace1 = go.Scatter(
x = data_T_speed["formula"],
y = data_T_speed["Active.Power"],
mode = "lines+markers",
name = "ActivePower(kW)",
line = dict(width = 3))
data = [trace1]
layout = dict(title = "Wind Speed (m/s)^3*airdensity vs Power Curve fig 4".format(turbine_no),
xaxis= dict(title= 'Wind Speed (m/s)^3*airdensity',ticklen= 5,zeroline= False),
yaxis= dict(title= 'Power ',ticklen= 5,zeroline= False),
legend=dict(x=0.5, y=0.5))
fig = dict(data = data, layout = layout)
iplot(fig)
Below [Fig 4] is the relationship between Power and ρ x V3, ρ being the Air Density and V being the Wind Velocity
XYZ Inc., the manufacturer, deployed us to help them find answers to the below questions which would help them improve their efficiency and in turn help them maximize their Power Output. Based on the analysis done on the data received from the sensors, below are the answers to the questions. Please note, the answers may not be in the exact order in which they have been asked.
[Fig 1] shows an exhaustive relationship between all the parameters. The relationships are rated between -1.0 and +1.0.
• A relationship of +1.0 would mean that there is a positive direct proportionality between the two parameters. • A relationship of +1.0 would mean that there is an inverse proportionality between the two parameters.
• Wind Speed, Tower Acceleration RMS are directly proportional and is highly related to the generated Active Power (by a factor of 0.9 as compared to the other parameters).
• Increasing ambient temperature has a negative impact on the generated Power Output (by a factor of -0.6 as compared to the other parameters). With increasing temperature, the generated power tends to decrease.
• The Generator Speed can be seen to be directly proportional to the Active Power.
o An increase in the generator speed increases the gearbox temperature.
o The gearbox temperature also increases with increase in Ambient temperature.
o An increase in the temperature of gearbox leads to an increase in temperature of the Heat Sink.
o With an increase in the Heat Sink temperature, the power generation gets negatively affected. This in turn affects the generated power efficiency due to the thermal losses incurred during power generation.
trace1 = go.Scatter(
x = data_T_speed["Active.Power"],
y = data_T_speed["Ambient.Temp"],
mode = "lines+markers",
name = "Ambient Temp",
line = dict(width = 3))
trace2 = go.Scatter(
x = data_T_speed["Active.Power"],
y = data_T_speed["Gearbox.Oil.Temp"],
mode = "lines+markers",
name = "Gearbox Oil Temp",
line = dict(width = 3))
trace3 = go.Scatter(
x = data_T_speed["Active.Power"],
y = data_T_speed["Hydraulic.Oil.Temp"],
mode = "lines+markers",
name = "Hydraulic Oil Temp",
line = dict(width = 3))
trace4 = go.Scatter(
x = data_T_speed["Active.Power"],
y = data_T_speed["Nacelle.Temp"],
mode = "lines+markers",
name = "Nacelle Temp",
line = dict(width = 3))
trace5 = go.Scatter(
x = data_T_speed["Active.Power"],
y = data_T_speed["PCU.Heatsink.Temp"],
mode = "lines+markers",
name = "PCU Heatsink Temp",
line = dict(width = 3))
data = [trace1,trace2,trace3,trace4,trace5]
layout = dict(title = "{} temp vs power Curve".format(turbine_no),
xaxis= dict(title= 'Power',ticklen= 5,zeroline= False),
yaxis= dict(title= 'Ambient Temp',ticklen= 5,zeroline= False),
legend=dict(x=0.5, y=0.5))
fig = dict(data = data, layout = layout)
iplot(fig)
• Direction_x has a high relationship with the generated power (by a factor of 0.8 as compared to the other parameters) and with the generator speed (by a factor of 0.9 as compared to the other parameters). Through the data set, it seems that Direction_x is the inclination at which the wind flows. Going by this logic, it seems fair that it has a relationship with Wind Speed, Timer Yaw and Yaw Error by a factor of 0.7, 0.5 and 0.6 respectively as compared to the other parameters.
• Also, we have already concluded from [Fig 3] and from the theoretical equation, that the Air Density is directly proportional to the Generated Power Output.
trace1 = go.Scatter(
x = data_T_speed["Wind.Speed"],
y = data_T_speed["Active.Power"],
mode = "lines+markers",
name = "ActivePower(kW)",
line = dict(width = 3))
data = [trace1]
layout = dict(title = "{} Power vs Wind Speed Curve Fig 7 ".format(turbine_no),
xaxis= dict(title= 'Wind Speed (m/s)',ticklen= 5,zeroline= False),
yaxis= dict(title= 'Power',ticklen= 5,zeroline= False),
legend=dict(x=0.5, y=0.5))
fig = dict(data = data, layout = layout)
iplot(fig)
Every wind turbine, based on its location and its design specifications, has its own dedicated Rated Speed, cut-in speed and cut-out speed.
The rated speed is the point at which the turbine generates the maximum power output.
Cut-in Speed can be understood as the wind speed at which the blades start running and the Active Power generation begins.
On the Contrary, Cut-out speed refers to the speed at which the turbine shuts down to avoid damage. At cut-out speeds the turbine reaches dangerously high voltages and hence needs to be stopped in order to protect from the voltage surges and damage to the turbine.
These speed parameters are important to derive the efficiency of the wind turbine. Above graph [Fig 7] determines these parameters of the wind turbine.
The rated speed of the turbine is around 13-15 m/s.
The cut-in speed of the turbine is approximately 4-5 m/s.
The cut-out speed of the turbine is close to 25 m/s
Below [Fig 8] is the relationship between Wind Speed and Pitch Data
#Wind Speed VS Pitch Data
trace1 = go.Scatter(
x = data_T_speed["Wind.Speed"],
y = data_T_speed["Blade1.Pitch.Angle"],
mode = "lines+markers",
name = "Blade1.Pitch.Angle",
line = dict(width = 3))
trace2 = go.Scatter(
x = data_T_speed["Wind.Speed"],
y = data_T_speed["Blade2.Pitch.Angle"],
mode = "lines+markers",
name = "Blade2.Pitch.Angle",
line = dict(width = 3))
trace3 = go.Scatter(
x = data_T_speed["Wind.Speed"],
y = data_T_speed["Blade3.Pitch.Angle"],
mode = "lines+markers",
name = "Blade3.Pitch.Angle",
line = dict(width = 3))
data = [trace1,trace2,trace3]
layout = dict(title = "{} Wind Speed VS Pitch Curve Fig 8".format(turbine_no),
xaxis= dict(title= 'Wind Speed (m/s)',ticklen= 5,zeroline= False),
yaxis= dict(title= 'Blade Pitch Angle',ticklen= 5,zeroline= False),
legend=dict(x=0.5, y=0.5))
fig = dict(data = data, layout = layout)
iplot(fig)
Below [Fig 9] is the relationship between Wind Speed and Temperature
#Wind.Speed vs Ambient.Temp
trace1 = go.Scatter(
x = data_T_speed["Wind.Speed"],
y = data_T_speed["Ambient.Temp"],
mode = "lines+markers",
name = "ActivePower(kW)",
line = dict(width = 3))
data = [trace1]
layout = dict(title = "{} Wind Speed vs Ambient Temp fig 9".format(turbine_no),
xaxis= dict(title= 'Wind Speed ',ticklen= 5,zeroline= False),
yaxis= dict(title= 'Ambient Temp',ticklen= 5,zeroline= False),
legend=dict(x=0.5, y=0.5))
fig = dict(data = data, layout = layout)
iplot(fig)
Based on the power equation, following are the major factors that contribute to fluctuations in wind power output theoretically:
• From the power equation it can be inferred that power is directly proportional to the rotor swept area (area swept by the blades of the wind turbine).
• So, larger the turbine blades, greater is the power output.
• This parameter being a design specification, remains constant throughout.
• Wind speed depends on height of the turbine from the ground.
• Wind turbines are thus mounted at an optimum height form the ground level in order to obtain the maximum power output.
• Wind velocity depends on the ambient temperature as seen in the [Fig 9].
• Wind velocity also depends on air density as seen in the [Fig 10].
# Wind Speed (m/s) vs Air Density
trace1 = go.Scatter(
x = data_T_speed["Wind.Speed"],
y = data_T_speed["Air.Density"],
mode = "lines+markers",
name = "ActivePower(kW)",
line = dict(width = 3))
data = [trace1]
layout = dict(title = "{} Wind Speed (m/s) vs Air Density Curve Fig 10 ".format(turbine_no),
xaxis= dict(title= 'Wind Speed (m/s)',ticklen= 5,zeroline= False),
yaxis= dict(title= 'Air Density',ticklen= 5,zeroline= False),
legend=dict(x=0.5, y=0.5))
fig = dict(data = data, layout = layout)
iplot(fig)
3.Air Density:
• Air density depends on the temperature and weather conditions.
• Varying temperatures / weather conditions affect the air density which in turn affects the wind speed.
• Fluctuating temperatures and wind speed leads to fluctuating power outputs.
• Air density is maximum at sea level. As Wind power is directly proportional to air density, increase in air density increases power output.
• At higher altitude, air density decreases significantly, so wind farms cannot be made in the mountains.
• Thus, making the turbine taller and taller will not give more power.
• The optimum values of air density can be achieved at sea level.
# sorting the data for temp
data_T_temp=data_T_speed.sort_values('Ambient.Temp')
# Air Density vs Ambient Temp
trace1 = go.Scatter(
x = data_T_temp["Ambient.Temp"],
y = data_T_temp["Air.Density"],
mode = "lines+markers",
name = "ActivePower(kW)",
line = dict(width = 3))
data = [trace1]
layout = dict(title = " {} Air Density vs Ambient Temp".format(turbine_no),
xaxis= dict(title= 'Ambient Temp ',ticklen= 5,zeroline= False),
yaxis= dict(title= 'Air Density',ticklen= 5,zeroline= False),
legend=dict(x=0.5, y=0.5))
fig = dict(data = data, layout = layout)
iplot(fig)
• From [Fig 12] (below) it can be observed that the wind turbine operates regularly within the temperature range from -20 degrees to 30 degrees.
• However, when the temperature is beyond this range, it influences the output Power.
• If the temperature is too high, the air density will be low and in turn leads to a drop in the Output Power.
• If the temperature is too low, the blades and other parts might be frozen, and the wind turbine will stop working.
o This anomaly can be addressed by adopting effective operation & maintenance techniques available.
o Sensors can be used to detect the build-up of ice on the rotor.
o A control unit can be designed to process the signals received from the sensors and activate a possible ice removal mechanism.
o This approach is found to be followed in the aeronautical industry to remove the icing from the propellers which affects the functioning of the airplanes.
o Another approach that is being followed is application of anti-adhesive coating such as Teflon coating on the blades.
#Temperature VS Gearbox Oil Temp
trace1 = go.Scatter(
x = data_T_speed["Active.Power"],
y = data_T_speed["Ambient.Temp"],
mode = "lines+markers",
name = "Ambient Temp",
line = dict(width = 3))
trace2 = go.Scatter(
x = data_T_speed["Active.Power"],
y = data_T_speed["Gearbox.Oil.Temp"],
mode = "lines+markers",
name = "Gearbox Oil Temp",
line = dict(width = 3))
trace3 = go.Scatter(
x = data_T_speed["Active.Power"],
y = data_T_speed["Hydraulic.Oil.Temp"],
mode = "lines+markers",
name = "Hydraulic Oil Temp",
line = dict(width = 3))
trace4 = go.Scatter(
x = data_T_speed["Active.Power"],
y = data_T_speed["Nacelle.Temp"],
mode = "lines+markers",
name = "Nacelle Temp",
line = dict(width = 3))
trace5 = go.Scatter(
x = data_T_speed["Active.Power"],
y = data_T_speed["PCU.Heatsink.Temp"],
mode = "lines+markers",
name = "PCU Heatsink Temp",
line = dict(width = 3))
data = [trace1,trace2,trace3,trace4,trace5]
layout = dict(title = "{} temp vs power Curve".format(turbine_no),
xaxis= dict(title= 'Power',ticklen= 5,zeroline= False),
yaxis= dict(title= 'Ambient Temp',ticklen= 5,zeroline= False),
legend=dict(x=0.5, y=0.5))
fig = dict(data = data, layout = layout)
iplot(fig)
# case 9
x1=working_data_set['hour']
y1=working_data_set['Active.Power']
z1=working_data_set['Wind.Speed']
a1=working_data_set['Ambient.Temp']
• It can be observed in [Fig 12] that most of the outliers for generated power seem to occur between 6 AM and 8 AM.
• It has already been established that there is a direct correlation between Power and Wind Speed, both theoretically and statistically. From [Fig 13] it may be inferred that between 6 AM and 9 AM we see the maximum number of outliers. • In the early morning hours, there seems to be a significant dip in the temperature.
trace1 = go.Box(
y=z1,
x=x1,
name='radishes',
marker=dict(
color='#FF4136'
),boxmean='sd'
)
data = [ trace1]
layout = go.Layout(
yaxis=dict(
title='wind speed distrubution for every hr of day ',
zeroline=False
),
boxmode='group'
)
fig = go.Figure(data=data, layout=layout)
iplot(fig)
trace1 = go.Box(
y=a1,
x=x1,
name='radishes',
marker=dict(
color='#FF4136'
),boxmean='sd'
)
data = [ trace1]
layout = go.Layout(
yaxis=dict(
title='temp distrubution for every hr of day ',
zeroline=False
),
boxmode='group'
)
fig = go.Figure(data=data, layout=layout)
iplot(fig)
import plotly.plotly as py
import plotly.graph_objs as go
y_data=y1
x_data=x1
trace0 = go.Box(
y=y_data,
x=x_data,
name='kale',
marker=dict(
color='#3D9970'
),
boxmean='sd'
)
data = [trace0]
layout = go.Layout(
yaxis=dict(
title='Power gernarated every hr of a day fig 10',
zeroline=False
),
boxmode='group'
)
fig = go.Figure(data=data, layout=layout)
iplot(fig)
It can be inferred from the above graphs that the wind speed is maximum during daytime i.e. 6 AM to 9 AM where the temperature is low and air density is high. If the wind speed increases the wind power generated also increases.
Below graphs depicts a clear picture of how wind speed, air density and temperature affect the wind power output. Higher the temperature, lower the air density which implies low wind speed and low power output. This trend can be observed during the months May to Sep
Turbine seems to be more productive during early hours of the day i.e., 5 to 9 AM from [Fig 10], where the temperatures are cooler compared to the rest of the day. It also implies that air density is more, hence wind speed increases and thus a higher generated power output. I
x1=working_data_set['Month']
y1=working_data_set['Active.Power']
z1=working_data_set['Wind.Speed']
a1=working_data_set['Ambient.Temp']
b1=working_data_set['Air.Density']
data = [
go.Histogram(
histfunc = "avg",
y = z1,
x = x1,
name = "avg"
)]
layout = go.Layout(
title='Avg wind speed over months fig 15',
xaxis=dict(
title='Month'
),
yaxis=dict(
title='Avg wind speed'
),
bargap=0.2,
bargroupgap=0.1
)
fig = go.Figure(data=data, layout=layout)
iplot(fig, filename='styled histogram')
data = [
go.Histogram(
histfunc = "avg",
y = a1,
x = x1,
name = "avg"
)]
layout = go.Layout(
title='Avg Temp over months fig 16',
xaxis=dict(
title='Month'
),
yaxis=dict(
title='Avg Temp'
),
bargap=0.2,
bargroupgap=0.1
)
fig = go.Figure(data=data, layout=layout)
iplot(fig, filename='styled histogram')
data = [
go.Histogram(
histfunc = "avg",
y = b1,
x = x1,
name = "avg"
)]
layout = go.Layout(
title='Air Density over months fig 17',
xaxis=dict(
title='Month'
),
yaxis=dict(
title='Air Density',range=[1.1,1.25]
),
bargap=0.2,
bargroupgap=0.1
)
fig = go.Figure(data=data, layout=layout)
iplot(fig, filename='styled histogram')
import plotly.plotly as py
import plotly.graph_objs as go
data = [
go.Histogram(
histfunc = "sum",
y = y1,
x = x1,
name = "sum"
)]
layout = go.Layout(
title='Total power generated over months fig 18',
xaxis=dict(
title='Month'
),
yaxis=dict(
title='Total power generated over the month'
),
bargap=0.2,
bargroupgap=0.1
)
fig = go.Figure(data=data, layout=layout)
iplot(fig, filename='styled histogram')
From the monthly statistics graphs ([Fig 15] to [Fig 18]) it can be inferred that the wind power is maximum during winters (October to December), where also the wind speeds are higher. It can also be observed that the temperature is minimum and air density is maximum compared to rest of the year.
The missing parameters are ‘Area swept by the rotor’ and the ‘efficiency’ of the generator.
Need a graph between below:
P = K Air Density VVV K = 0.0000665(CpA) A is a constant which will never change.
working_data_set["missing_value"]=working_data_set['Active.Power']/(train_data["Wind.Speed"]*train_data["Air.Density"]*train_data["Wind.Speed"]*train_data["Wind.Speed"] )
z1 = working_data_set["missing_value"]/max(working_data_set["missing_value"])
data = [
go.Histogram(
histfunc = "avg",
y = z1,
x = x1,
name = "avg"
)]
layout = go.Layout(
title='Efficiency Over a Year',
xaxis=dict(
title='Month'
),
yaxis=dict(
title='Efficiency'
),
bargap=0.2,
bargroupgap=0.1
)
fig = go.Figure(data=data, layout=layout)
iplot(fig, filename='styled histogram')
The missing parameters are ‘Area swept by the rotor’ and the ‘efficiency’ of the generator. Since the Area is a constant throughout, we can say that the Efficiency is a factor of [P/(ρ x V3)]. The below graph shows the change in this factor over 8 months.
Based on the above analysis, it can be understood that below variable parameters have a major role to play in determining the generated Power Output from a Wind Turbine.
Wind Speed
Air Density
Temperature
The below inputs will significantly help in improving the efficiency of the Power System as a whole.
Wind Speed is a natural phenomenon which cannot be controlled, but we do get an understanding, from the above analysis, on how the wind speed varies.
With drop in temperature, we see an increase in the air density and with a drop in air density we see an increase in the wind speeds.
a. An increase in the wind speed leads to an increase in the generated power.
a. This is because frost may get accumulated on the wind blades, leading to the wind turbines to come to a standstill.
b. To prevent this, a control unit can be designed to process the signals received from the sensors and activate a possible ice removal mechanism.
c. Another approach that can be followed is application of anti-adhesive coating such as Teflon coating on the blades.
a. The efficiency of the system can be improved by employing methods to cool the Heat Sink Temperature, Gear Box Oil Temperature, Blade Motor Temperatures etc.
b. A control unit can be designed which will be able to detect spikes in the above mentioned temperature and takes necessary actions for bringing it down to an optimum value.